package com.ruoyi.function.jobhandler;

import com.ruoyi.function.domain.Orders;
import com.ruoyi.function.domain.SysTopUp;
import com.ruoyi.function.mapper.OrdersMapper;
import com.ruoyi.function.mapper.SysTopUpMapper;
import com.ruoyi.function.service.ISysTopUpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;

import java.util.Date;
import java.util.List;

/*
    订单定时任务
 */
@Slf4j
public class OrderAutoCancelTask {

    @Autowired
    private OrdersMapper ordersMapper;
    @Autowired
    private ISysTopUpService sysTopUpService;

    /**
     * 定时任务1：处理超时未接单订单（状态改为取消并退款）
     * 每1分钟执行一次
     */
    @Scheduled(cron = "0 */1 * * * ?")
    public void handleTimeoutOrders() {
        log.info("处理超时未接单订单（状态改为取消并退款）");
        // 获取10分钟前的时间
        Date tenMinutesAgo = new Date(System.currentTimeMillis() - 10 * 60 * 1000);

        // 查询状态为待接单(1)且创建时间超过10分钟的订单
        List<Orders> timeoutOrders = ordersMapper.selectOrdersByStatusAndCreateTime("1", tenMinutesAgo);


        for (Orders order : timeoutOrders) {
            try {
                sysTopUpService.orderRefund(order);
            } catch (Exception e) {
                log.info("{}退款失败。报错原因{}", order.getOrderId(), e.getMessage());
            }

        }

    }

    /**
     * 定时任务2：处理普通待接单订单（状态改为取消）
     * 每1分钟执行一次
     */
    @Scheduled(cron = "0 */1 * * * ?")
    public void handleNormalOrders() {
        log.info("处理普通待接单订单（状态改为取消）");

        // 修改 订单类型不是额外订单 且 状态为待接单（1）且创建时间超过10分钟的订单 状态修改为取消订单
        Date tenMinutesAgo = new Date(System.currentTimeMillis() - 10 * 60 * 1000);
        int i = ordersMapper.updateOrdersByCreateTime(tenMinutesAgo);

    }

}
